package algorithm.easy;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collector;
import java.util.stream.Collectors;

/**
 * 为了不在赎金信中暴露字迹，从杂志上搜索各个需要的字母，组成单词来表达意思。
 * <p>
 * 给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串，判断 ransomNote 能不能由 magazines 里面的字符构成。
 * <p>
 * 如果可以构成，返回 true ；否则返回 false 。
 * <p>
 * magazine 中的每个字符只能在 ransomNote 中使用一次。
 */
public class CanConstruct383 {
    public static boolean canConstruct(String ransomNote, String magazine) {
        Map<Integer, Long> map = magazine.chars().boxed().collect(Collectors.groupingBy(Integer::intValue, Collectors.counting()));
        int[] ints = ransomNote.chars().toArray();
        for (int i : ints) {
            Long m = map.getOrDefault(i, 0L);
            m -= 1;
            if (m < 0) {
                return false;
            }
            map.put(i, m);
        }
        return true;
    }

    public static void main(String[] args) {
        canConstruct("aa","aab");
    }
}
